﻿using System;
using System.Data;
using System.Data.SqlClient;
using Onshi.POS.AccesoDatos.Interfaces;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosCliente : ServicioDatosBase, IServicioDatosCliente
    {
        #region Constructores

        public ServicioDatosCliente()
            : base()
        {
        }

        #endregion

        #region Metodos

        public DataSet Clientes_DevolverTodos()
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverTodosConDetalleDomiciliosTelefonos()
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverTodosConDetalleDomiciliosTelefonos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorCodigo(String codigo)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverPorCodigo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorCodigoConDetalleDomiciliosTelefonos(String codigo)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverPorCodigoConDetalleDomiciliosTelefonos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorId(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Clientes_DevolverPorIdConDetalleDomiciliosTelefonos(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("Clientes_DevolverPorIdConDetalleDomiciliosTelefonos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Clientes_Insertar(String codigo, String nombre, String email, String sitioWeb, Decimal descuentoRecargo, Decimal limiteDeuda, String cuit, String mensajeriaInstantanea, Int32 idRubroCliente, Byte idTipoIva, Int32 idListaPrecioVenta, Int32 idVendedor, Byte idTipoMensajeriaInstantanea)
        {
            try
            {
                var cm = new SqlCommand("Clientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                cm.Parameters.Add(new SqlParameter("@Nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@Email", email));
                cm.Parameters.Add(new SqlParameter("@SitioWeb", sitioWeb));
                cm.Parameters.Add(new SqlParameter("@DescuentoRecargo", descuentoRecargo));
                cm.Parameters.Add(new SqlParameter("@LimiteDeuda", limiteDeuda));
                cm.Parameters.Add(new SqlParameter("@Cuit", cuit));
                cm.Parameters.Add(new SqlParameter("@MensajeriaInstantanea", mensajeriaInstantanea));
                cm.Parameters.Add(new SqlParameter("@IdRubroCliente", idRubroCliente));
                cm.Parameters.Add(new SqlParameter("@IdTipoIva", idTipoIva));
                cm.Parameters.Add(new SqlParameter("@IdListaPrecioVenta", idListaPrecioVenta));
                cm.Parameters.Add(new SqlParameter("@IdVendedor", idVendedor));
                cm.Parameters.Add(new SqlParameter("@IdTipoMensajeriaInstantanea", idTipoMensajeriaInstantanea));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_Modificar(Int32 idCliente, String codigo, String nombre, String email, String sitioWeb, Decimal descuentoRecargo, Decimal limiteDeuda, String cuit, String mensajeriaInstantanea, Int32 idRubroCliente, Byte idTipoIva, Int32 idListaPrecioVenta, Int32 idVendedor, Byte idTipoMensajeriaInstantanea)
        {
            try
            {
                var cm = new SqlCommand("Clientes_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                cm.Parameters.Add(new SqlParameter("@Codigo", codigo));
                cm.Parameters.Add(new SqlParameter("@Nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@Email", email));
                cm.Parameters.Add(new SqlParameter("@SitioWeb", sitioWeb));
                cm.Parameters.Add(new SqlParameter("@DescuentoRecargo", descuentoRecargo));
                cm.Parameters.Add(new SqlParameter("@LimiteDeuda", limiteDeuda));
                cm.Parameters.Add(new SqlParameter("@Cuit", cuit));
                cm.Parameters.Add(new SqlParameter("@MensajeriaInstantanea", mensajeriaInstantanea));
                cm.Parameters.Add(new SqlParameter("@IdRubroCliente", idRubroCliente));
                cm.Parameters.Add(new SqlParameter("@IdTipoIva", idTipoIva));
                cm.Parameters.Add(new SqlParameter("@IdListaPrecioVenta", idListaPrecioVenta));
                cm.Parameters.Add(new SqlParameter("@IdVendedor", idVendedor));
                cm.Parameters.Add(new SqlParameter("@IdTipoMensajeriaInstantanea", idTipoMensajeriaInstantanea));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_Eliminar(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("Clientes_Eliminar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Clientes_Habilitar(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("Clientes_Habilitar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesDetalles_Insertar(Int32 idCliente, String observacion, Byte[] imagen)
        {
            try
            {
                var cm = new SqlCommand("ClientesDetalles_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@Imagen", imagen));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesDetalles_Modificar(Int32 idCliente, String observacion, Byte[] imagen)
        {
            try
            {
                var cm = new SqlCommand("ClientesDetalles_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@Imagen", imagen));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosClientes_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosClientes_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 DomiciliosClientes_Insertar(Int32 idCliente, Byte idTipoDomicilio, Int32 idBarrio, String calle, String numero, String piso, String departamento, String observacion)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosClientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                cm.Parameters.Add(new SqlParameter("@IdTipoDomicilio", idTipoDomicilio));
                cm.Parameters.Add(new SqlParameter("@IdBarrio", idBarrio));
                cm.Parameters.Add(new SqlParameter("@Calle", calle));
                cm.Parameters.Add(new SqlParameter("@Numero", numero));
                cm.Parameters.Add(new SqlParameter("@Piso", piso));
                cm.Parameters.Add(new SqlParameter("@Departamento", departamento));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteNonQuery());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosClientes_ModificarBarrios(Int32 idBarrio, Int32 idBarrioNuevo)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosClientes_ModificarBarrios", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdBarrio", idBarrio));
                cm.Parameters.Add(new SqlParameter("@IdBarrioNuevo", idBarrioNuevo));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void TelefonosClientes_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("TelefonosClientes_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 TelefonosClientes_Insertar(Int32 idCliente, Byte idTipoTelefono, String codigoArea, String numero, String observacion)
        {
            try
            {
                var cm = new SqlCommand("TelefonosClientes_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                cm.Parameters.Add(new SqlParameter("@IdTipoTelefono", idTipoTelefono));
                cm.Parameters.Add(new SqlParameter("@CodigoArea", codigoArea));
                cm.Parameters.Add(new SqlParameter("@Numero", numero));
                cm.Parameters.Add(new SqlParameter("@Observacion", observacion));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteNonQuery());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ClientesTiposFormasPagos_EliminarPorCliente(Int32 idCliente)
        {
            try
            {
                var cm = new SqlCommand("ClientesTiposFormasPagos_EliminarPorCliente", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 ClientesTiposFormasPagos_Insertar(Int32 idCliente, Byte idTipoFormaPago)
        {
            try
            {
                var cm = new SqlCommand("ClientesTiposFormasPagos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@IdCliente", idCliente));
                cm.Parameters.Add(new SqlParameter("@IdTipoFormaPago", idTipoFormaPago));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteNonQuery());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
